﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Web.Services;
using System.Data;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_PublishModule : System.Web.UI.Page
    {
        int ciclo=0;
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    
                   ciclo = MaxCiclo();
                    //CargarDdls();
                    CargaDdlTipoModulos();
                    if ( ciclo==0)
                    {
                        lblMensajeErrorPublicar.Text="No existe ningún ciclo";
                        idMensajePublicar.Visible = true;
                        tablaPublicar.Visible = false;

                    }
                    else if (ddlTipoModulo.Items.Count == 0 || ddlTipoModulo.Items.Count == 1)
                    {
                        lblMensajeErrorPublicar.Text="No existe ningún Modulo en este ciclo";
                        idMensajePublicar.Visible = true;
                        tablaPublicar.Visible = false;
                    }
                    ddlTipoModulo.AutoPostBack = true;
                    ddlNivel.AutoPostBack = true;
                    MaintainScrollPositionOnPostBack = true;
                    btnPublicarModulo.Attributes.Add("onclick", " this.disabled = true,this.value='Procesando...'; " + ClientScript.GetPostBackEventReference(btnPublicarModulo, null) + ";");
                    MaintainScrollPositionOnPostBack = true;
                    OcultarYMostrarPublicacion(false);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
            else
            {
                MaintainScrollPositionOnPostBack = true;
            }
        }
        private void CargarDdls()
        {
            ListadoNiveles  oNivel = new ListadoNiveles();
            List<Nivel> lista=new List<Nivel>();
            oNivel.ciclo = (int)Session["maxCiclo"];
            oNivel.idTipoModulo = int.Parse(ddlTipoModulo.SelectedValue);
            if (ddlTipoModulo.SelectedIndex==0)
            {
                OcultarYMostrarPublicacion(false);
            }
            else
            {
                lista = oNivel.getNivelesConTipo();
                lista.Insert(0, new Nivel() { idNivel = 0, equivalente = "<Elegir un nivel>" });
                ddlNivel.DataSource = lista;
                ddlNivel.DataTextField = "equivalente";
                ddlNivel.DataValueField = "idNivel";
                ddlNivel.DataBind();
            }
            
        }
        private int MaxCiclo()
        {
            int maxCiclo;
            Ciclos oCiclo = new Ciclos();
            maxCiclo= oCiclo.GetMaxCiclo();
            lblCiclo.Text = "Ciclo # "+ maxCiclo;
            Session["maxCiclo"] = maxCiclo;
            return (int)Session["maxCiclo"];
        }
        private void CargaDdlTipoModulos()
        {
            TipoModulos tipoModu = new TipoModulos();
            tipoModu.ciclo = (int)Session["maxCiclo"];
            List<TipoModulos> lista = new List<TipoModulos>();
            lista = tipoModu.GetTipoModulos();
            lista.Insert(0, new TipoModulos() { idTipoModulo = 0, tipoModulo = "<seleccione>" });
            ddlTipoModulo.DataSource = lista;
            ddlTipoModulo.DataTextField = "tipoModulo";
            ddlTipoModulo.DataValueField = "idTipoModulo";
            ddlTipoModulo.DataBind();

        }

        protected void btnPublicarModulo_Click(object sender, EventArgs e)
        {
            Validaciones oValidaciones = new Validaciones();
            if (Page.IsValid)
            {
                string mensaje = "";
                string cadena = "";
                string cadenafin = "";
                double dif = 0;
                if (btnPublicarModulo.Text == "Publicar Módulo")
                {
                    cadena = txtHoraInicio.Text;
                    cadenafin = txtHoraFin.Text;
                    if (cadena.Length == 8)
                    {
                        mensaje = oValidaciones.VerificaHorario(cadena);
                        if (mensaje == "FORMATO CORRECTO")
                        {
                            if (cadenafin.Length == 8)
                            {
                                mensaje = oValidaciones.VerificaHorario(cadenafin);
                                if (mensaje == "FORMATO CORRECTO")
                                {
                                    mensaje = oValidaciones.VerificaHorario(cadenafin);
                                }
                            }
                            else
                            {
                                mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA FIN";
                                ActivaError();
                            }
                        }
                    }
                    else
                    {
                        mensaje = "ERROR VERIFICAR EL FORMATO DE LA HORA INICIO";
                        ActivaError();
                    }
                    if (mensaje == "FORMATO CORRECTO")
                    {
                        if (ddlNivel.SelectedValue == "0")
                        {
                            mensaje = "DEBE SELECCIONAR UNA OPCIÓN EN NIVEL";
                            ActivaError();
                        }
                        else
                        {
                            try
                            {
                                TimeSpan ts = new TimeSpan();
                                ts = DateTime.Parse(txtHoraFin.Text) - DateTime.Parse(txtHoraInicio.Text);
                                dif = ts.TotalSeconds;
                                if (dif <= 0.0)
                                {
                                    mensaje = "HORA FINAL MENOR O IGUAL A LA INICIAL";
                                    ActivaError();
                                    txtHoraFin.Focus();
                                }
                                else
                                {
                                    Modulos oModulos = new Modulos();
                                    oModulos.ciclo =(int)Session["maxCiclo"];
                                    oModulos.idAdmin = (int)Session["idAdminEspamIdiomasVarSession008"];
                                    oModulos.nivel = int.Parse(ddlNivel.SelectedValue);
                                    oModulos.fechaInicio=DateTime.Parse(txtFechaInicio.Text);
                                    oModulos.fechaFin =DateTime.Parse(txtFechaFin.Text);
                                    oModulos.horaInicio = txtHoraInicio.Text;
                                    oModulos.horaFin = txtHoraFin.Text;
                                    oModulos.cupos = int.Parse(txtCupos.Text);
                                    oModulos.idTipoModulo = int.Parse(ddlTipoModulo.SelectedValue);
                                    mensaje= oModulos.PublicarModulos();
                                    if (mensaje == "MODULO PUBLICADOS CORRECTAMENTE")
                                    {
                                        ActivaSuccess();
                                        OcultarYMostrarPublicacion(false);
                                        gvModulos.DataSource = "";
                                        gvModulos.DataBind();
                                    }
                                    else
                                    {
                                        ActivaError();
                                    }

                                }
                            }
                            catch (Exception)
                            {
                                mensaje = "ERROR REVISE FORMATO DE LA FECHA";
                                ActivaError();
                            }
                        }
                    }
                    lblvalida.Text = mensaje;
                    lblvalida.Visible = true;
                    CargarDdls();
                }
            }
            else
            {
                lblvalida.Text = "VERIFIQUE CAMPOS DEL FORMULARIO";
                lblvalida.Visible = true;
                lblvalida.ForeColor = Color.Red;
            }
        }

        protected void ddlNivel_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNivel.SelectedIndex == 0)
            {
                OcultarYMostrarPublicacion(false);
                CargarModulos();
            }
            else
            {
                divMensajeError.Visible = false;
                CargarModulos();
            }
        }
        private void OcultarYMostrarPublicacion(bool value)
        {   fila1.Visible = value;
            fila2.Visible = value;
            fila3.Visible = value;
        }
        private void CargarModulos()
        {
           
            ListadoNiveles oListadoNiveles = new ListadoNiveles();
            string menValida = "";
            oListadoNiveles.ciclo =  (int)Session["maxCiclo"];
            oListadoNiveles.idNivel = int.Parse(ddlNivel.SelectedValue);
            oListadoNiveles.idTipoModulo = int.Parse(ddlTipoModulo.SelectedValue);
            menValida = oListadoNiveles.ConsultarNivelPublicado();
                //"PUBLICAR";//oListadoNiveles.ConsultarNivelPublicado();
            if (menValida=="NIVEL YA PUBLICADO EN ESTE CICLO")
            {
                 lblMensaje.Text="NIVEL YA HA SIDO PUBLICADO EN ESTE CICLO";
                 divMensajeError.Visible = true;
                 gvModulos.DataSource = "";
                 gvModulos.DataBind();
                 OcultarYMostrarPublicacion(false);
            }
            
            else if (menValida=="PUBLICAR")
            {
                Modulos oModulos = new Modulos();
                oModulos.nivel = int.Parse(ddlNivel.SelectedValue);
                oModulos.ciclo = (int)Session["maxCiclo"];
                oModulos.tag = 1;
                oModulos.idTipoModulo = int.Parse(ddlTipoModulo.SelectedValue);
                List<Modulos> lista = new List<Modulos>();
                lista = oModulos.getModulosByNivel();
                if (lista.Count == 0)
                {
                    gvModulos.DataSource = lista;
                    gvModulos.DataBind();

                }
                else
                {
                    gvModulos.DataSource = lista;
                    gvModulos.DataBind();
                    OcultarYMostrarPublicacion(true);
                  
                }
            }
           
        }
        protected void ActivaError()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Red;
        }
        protected void ActivaSuccess()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Green;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_PublishModule.aspx");
        }

        protected void ddlTipoModulo_SelectedIndexChanged(object sender, EventArgs e)
        {
            divMensajeError.Visible = false;
            CargarDdls();
        }
    }
}